<?php
namespace app\common\model;

use think\Model;
use think\Db;
class Basic extends Model
{
    // 指定表名,不含前缀
    protected $name = 'basic';
    /**
     * @param array $arg
     * @param string $field
     */
    public function getListByArg(array $arg,$field='*')
    {
        return $this->where($arg)->field($field)->select();
    }
	
	 public function getListByArgOne(array $arg,$field='*')
    {
        return $this->where($arg)->field($field)->find();
    }

    /**
     * 根据考场设置id 获取考场设置
     * @param $id
     */
    public function getSettingById($id){
        $arrs=$this->alias('a')->join('ex_basic_setting b','a.id = b.basicid')->field('a.id as basicid,b.*')->where(['b.basicid'=>$id])->select();
        return $arrs;
    }
	
	
	/**
     * 获取不及格人员的考场
     * 
     */
    public function getSettingByfailedBasic($adminrg){
        $arrs=$this->getListByArg(['isdelete'=>0,'admin_reg'=>['in',$adminrg]],'id,basic');
		$basic_id = [];
		foreach($arrs as $v){
			$basic_id[] = $v->id;
		}
		$arrsc = Db::name('exams_papers')->alias('a')->join('papers_info b','a.ep_id = b.paperid')->field('distinct a.basic_name,a.basicid')->where('a.basicid in('.implode(',',$basic_id).') and b.modified < b.passscore')->select();
        return $arrsc;
    }
	
	/**
     * 获取不及格人员id
     * 
     */
    public function getSettingByfailed($basic_id){

		$arrsc = Db::name('exams_papers')->alias('a')->join('papers_info b','a.ep_id = b.paperid')->field('distinct a.identity_id')->where("a.basicid='{$basic_id}' and b.modified < b.passscore")->select();
		$identity_id = ['identity_id'=>[]];
		foreach($arrsc as $v){
			$identity_id['identity_id'][] = $v['identity_id'];
			
		}
        return $identity_id;
    }
	/**
     * 获取人员id
     * 
     */
	public function getSettingByfailedpass($basic_id,$arr){
		
		$condition = '';
		switch($arr['condition'])
		{
		
		case 'passs':
			$condition = ' and b.modified > b.passscore';
		break;
		case 'alls':
		break;
		case 'moret':
			$condition = ' and b.modified >= '.$arr['fractions'];
		break;
		case 'lesst':
			$condition = ' and b.modified < '.$arr['fractions'];
		break;
		default:
			$condition = ' and b.modified < b.passscore'; //不及格
		}
		$arrsc = Db::name('exams_papers')->alias('a')->join('papers_info b','a.ep_id = b.paperid')->field('distinct a.identity_id')->where("a.basicid='{$basic_id}'".$condition)->select();
		$identity_id = ['identity_id'=>[]];
		foreach($arrsc as $v){
			$identity_id['identity_id'][] = $v['identity_id'];
			
		}
        return $identity_id;
    }
	
	/**
     * 通过身份证获取人员id
     * 
     */
    public function getListByArgIdcard($idcard,$child_plaform){
		$bcard = ['casdad'];
		if(is_array($idcard)){
				
			foreach($idcard as $v){
				if(self::isIdCard($v)){
					$bcard[] = $v;
				}
			}
		} else {
			if(self::isIdCard($idcard)){
				$bcard[] = $idcard;
			}
		}
	
		$arrsc = Db::name('user_company')->alias('a')->join('user b','a.userid = b.userid')->field('a.id')->where(['b.idcard'=>['in',$bcard],'a.admin_reg'=>['in',$child_plaform]])->select();
	
		$identity_id = ['identity_id'=>[]];
		foreach($arrsc as $v){
			$identity_id['identity_id'][] = $v['id'];
		}

        return $identity_id;
    }

	

	 public function isIdCard($id_card){ 
		 if(strlen($id_card)==18){
			return self::idcard_checksum18($id_card); 
		 }elseif((strlen($id_card)==15)){ 
		 $id_card=self::idcard_15to18($id_card); 
			return self::idcard_checksum18($id_card); 
		 }else{ 
			return false; 
		 } 
		} 
		// 计算身份证校验码，根据国家标准GB 11643-1999 
	public function idcard_verify_number($idcard_base){ 
		 if(strlen($idcard_base)!=17){ 
		 return false; 
		 } 
		 //加权因子 
		 $factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); 
		 //校验码对应值 
		 $verify_number_list=array('1','0','X','9','8','7','6','5','4','3','2'); 
		 $checksum=0; 
		 for($i=0;$i<strlen($idcard_base);$i++){ 
		 $checksum += substr($idcard_base,$i,1) * $factor[$i]; 
		 } 
		 $mod=$checksum % 11; 
		 $verify_number=$verify_number_list[$mod]; 
		 return $verify_number; 
		} 
		// 将15位身份证升级到18位 
	public function idcard_15to18($idcard){ 
		 if(strlen($idcard)!=15){ 
		 return false; 
		 }else{ 
		 // 如果身份证顺序码是996 997 998 999，这些是为百岁以上老人的特殊编码 
		 if(array_search(substr($idcard,12,3),array('996','997','998','999')) !== false){ 
		  $idcard=substr($idcard,0,6).'18'.substr($idcard,6,9); 
		 }else{ 
		  $idcard=substr($idcard,0,6).'19'.substr($idcard,6,9); 
		 } 
		 } 
		 $idcard=$idcard.self::idcard_verify_number($idcard); 
		 return $idcard; 
		} 
		// 18位身份证校验码有效性检查 
	public function idcard_checksum18($idcard){ 
		 if(strlen($idcard)!=18){ 
		 return false; 
		 } 
		 $idcard_base=substr($idcard,0,17); 
		 if(self::idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))){ 
		 return false; 
		 }else{ 
		 return true; 
		 } 
	}
	
}
